package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

import vista.VentanaCargarTiendas;
import vista.VentanaCargarTiendasModeloTabla;

import modelo.Organizacion;
import modelo.Producto;
import modelo.Tienda;
import modelo.TiendaDAO;



public class ControladorVentanaCargarTienda implements ActionListener {

	
	private VentanaCargarTiendas ventanaCargarTiendas;
	private VentanaCargarTiendasModeloTabla ventanaCargarTiendasModeloTabla;
	private JFileChooser fcVentanaAbrir;
	private FileNameExtensionFilter filtro;
	private File file;
	private Tienda tienda;
	private ArrayList<Tienda> otraTienda;
	private boolean registrarTienda;
	private Organizacion organizacion;
	private TiendaDAO tiendaDao;
	
	private static final String[] HORAS = {"00" , "01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" , "10" , "11" , "12"};
	private static final String[] MINUTOS = {"00" , "01" , "02" , "03" , "04" , "05" , "06" , "07" , "08" , "09" , "10" , "11" , "12" , "13" , "14" , "15" , "16" , "17" , "18" , "19" , "20" , "21" , "22" , "23" , "24" , "25" , "26" , "27" , "28" , "29" , "30" , "31" , "32" , "33" , "34" , "35" , "36" , "37" , "38" , "39" , "40" , "41" , "42" , "43" , "44" , "45" , "46" , "47" , "48" , "49" , "50" , "51" , "52" , "53" , "54" , "55" , "56" , "57" , "58" , "59"};
	private static final String[] AMPM = {"am", "pm"};
	
	private int numeroTienda;
	
	public ControladorVentanaCargarTienda(Organizacion organizacion) {
		super();		
		ventanaCargarTiendas = VentanaCargarTiendas.getInstancia();
		ventanaCargarTiendas.setLocationRelativeTo(null);
		ventanaCargarTiendas.setVisible(true);
		ventanaCargarTiendas.agregarListener(this);
		fcVentanaAbrir = new JFileChooser();
		filtro = new FileNameExtensionFilter("Archivo de texto","txt");
		fcVentanaAbrir.setFileFilter(filtro);
		otraTienda = new ArrayList<Tienda>();
		ventanaCargarTiendas.habilitarGuardarTiendas(false);
		ventanaCargarTiendas.habilitarCargarTiendas(true);
		ventanaCargarTiendas.setDatosHoraInicio(HORAS,MINUTOS,AMPM);
		ventanaCargarTiendas.setDatosHoraFin(HORAS,MINUTOS,AMPM);
		registrarTienda = true;
		this.organizacion = organizacion;
	
		tiendaDao = new TiendaDAO();
		numeroTienda = tiendaDao.numeroTiendas();
		
		if (numeroTienda > 0){
			ventanaCargarTiendas.cambiarCargarTienda();
			limpiar();
			ventanaCargarTiendas.habiliarLimpiarTiendas(true);
			
		}
		
		
		this.limpiar();
		
	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		
		//ventanaCargarTiendas.habilitarGuardarTiendas(false);
		
		if(numeroTienda > 0) {
		
			if (e.getActionCommand().equalsIgnoreCase("Agregar Tienda")){
			
			agregarTienda();
			
		} else if (e.getActionCommand().equalsIgnoreCase("Limpiar")){
			
			limpiar();
			
		} else if (e.getActionCommand().equalsIgnoreCase("Buscar")){
			
			buscarTienda();
			
			
		} else if (e.getActionCommand().equalsIgnoreCase("Salir")){
			limpiar();
			this.ventanaCargarTiendas.setVisible(false);
			
		} 

		} else {
			
			if (e.getActionCommand().equalsIgnoreCase("Cargar")){
				 
				cargarTienda();
	 
			} 
			
		}
		
		
	}

	private void buscarTienda() {
		
		if(this.ventanaCargarTiendas.getCodigo().equalsIgnoreCase("")){
			this.ventanaCargarTiendas.mostrarMensaje("Debe llenar el campo del codigo");
		}
		else {
			
			TiendaDAO tiendaDao = new TiendaDAO();
			Tienda tiendaa = new Tienda();
			String cod = this.ventanaCargarTiendas.getCodigo();
			
			tiendaa = tiendaDao.buscarTienda(cod);
			
			//if (this.organizacion.buscarTienda(cod) >= 0 ){
			if (tiendaa != null){
				//La tieanda ya Existe
				
				 this.ventanaCargarTiendas.mostrarMensaje("La tienda Existe");
				 //Tienda tienda = this.organizacion.getUnaTienda(this.organizacion.buscarTienda(cod));
				 
				 String direccion, nombre, horaInicio, horaFin;
				 direccion = tiendaa.getDireccion();
				 nombre = tiendaa.getNombre();
				 horaInicio = tiendaa.getHoraInicio();
				 horaFin =  tiendaa.getHoraFin();
					
				ventanaCargarTiendas.setDatosExistente(direccion, nombre, horaInicio, horaFin);
				ventanaCargarTiendas.bloquearVisible(true);
				ventanaCargarTiendas.bloquearEnabled(false);
				ventanaCargarTiendas.habilitarCargarTiendas(false);
			    ventanaCargarTiendas.habilitarBuscarTiendas(false);
			    ventanaCargarTiendas.hablitarCodigo(false, true);
				
		     } else {
		
		    	//Habilitar todas las cosas :D
		    	    ventanaCargarTiendas.habilitarGuardarTiendas(false);
					ventanaCargarTiendas.habilitarCargarTiendas(true);
					ventanaCargarTiendas.bloquearEnabled(true);
					ventanaCargarTiendas.bloquearVisible(true);
					
		     }
		
		}
		
	}


	private void limpiar() {
		
		ventanaCargarTiendas.limpiarCampos();
		ventanaCargarTiendas.habilitarBuscarTiendas(true);
		ventanaCargarTiendas.habilitarGuardarTiendas(false);
		ventanaCargarTiendas.habilitarCargarTiendas(true);
		ventanaCargarTiendas.hablitarCodigo(true,true);	
		ventanaCargarTiendas.bloquearEnabled(false);		
		ventanaCargarTiendas.bloquearVisible(false);
		
	}


	private void agregarTienda() {
		
		if (this.ventanaCargarTiendas.datosLlenos().equalsIgnoreCase("llenos")){
			
			guardarTiendas();
			TiendaDAO tiendaDao = new TiendaDAO();
			ArrayList<Tienda> OtraTienda = tiendaDao.consultarTiendas();
			//this.ventanaCargarTiendas.setListadoTiendas(new VentanaCargarTiendasModeloTabla(this.organizacion.getTiendas()));
			
			this.ventanaCargarTiendas.setListadoTiendas(new VentanaCargarTiendasModeloTabla(otraTienda));
			
		 } else {
			 
			 this.ventanaCargarTiendas.mostrarMensaje("Debe LLenar todos los campos con las respectivas horas validas");

		 }

		
	}


	private void cargarTienda() {
	
		int opcion = fcVentanaAbrir.showOpenDialog(null);
		String part;
		
		if (opcion == JFileChooser.APPROVE_OPTION){
			part = fcVentanaAbrir.getSelectedFile().getAbsolutePath();
			file = new File(part);

			procesarArchivo(file);
			ventanaCargarTiendas.habiliarLimpiarTiendas(true);
			ventanaCargarTiendas.cambiarCargarTienda();
			ventanaCargarTiendas.habilitarBuscarTiendas(true);
			ventanaCargarTiendas.habilitarGuardarTiendas(false);
			ventanaCargarTiendas.habilitarCargarTiendas(true);
			ventanaCargarTiendas.hablitarCodigo(true,true);	
			ventanaCargarTiendas.bloquearEnabled(false);		
			ventanaCargarTiendas.bloquearVisible(false);
			this.ventanaCargarTiendas.setListadoTiendas(new VentanaCargarTiendasModeloTabla(this.organizacion.getTiendas()));
		}
		
	}


	private void procesarArchivo(File file) {
		// TODO Auto-generated method stub
	
		StringTokenizer tok;
		String codigo, nombre, direccion, horaInicio, horaFin;
		ArrayList<Producto> productos;
		Tienda tienda;
	
		try{
			
			FileReader fr = new FileReader (file);
			BufferedReader br = new BufferedReader(fr);
			String linea;
		
			 while((linea=br.readLine())!=null) {
					
				Tienda tiendaa = new Tienda();
				
				tok = new StringTokenizer(linea,";");
				codigo = tok.nextToken();
				nombre = tok.nextToken();
				direccion = tok.nextToken();
				horaInicio = tok.nextToken();
				horaFin = tok.nextToken();
				
				tiendaa.setRif(codigo);
				tiendaa.setDireccion(direccion);
				tiendaa.setHoraFin(horaFin);
				tiendaa.setHoraInicio(horaInicio);
				tiendaa.setNombre(nombre);
				
				//productos = new ArrayList<Producto>();
				
				// //tienda = new Tienda(codigo, nombre, direccion, horaInicio, horaFin, productos);
				
				TiendaDAO tiendaDao = new TiendaDAO();
				tiendaDao.registrarTienda(tiendaa);
				
			    //this.organizacion.agregarTienda(tienda);

			}

			cargarTablaTiendas();
			registrarTienda = false;
			ventanaCargarTiendas.habilitarCargarTiendas(false);
			
		}catch(Exception ex){
			this.ventanaCargarTiendas.mostrarMensaje("Error : " + ex.getMessage());
		}
		
		
	}

	private void cargarTablaTiendas() {
		
		TiendaDAO tiendaDao = new TiendaDAO();
		
		//ArrayList<Tienda> otraTienda = new ArrayList();
		ArrayList<Tienda> otraTienda = tiendaDao.consultarTiendas();
		this.ventanaCargarTiendas.setListadoTiendas(new VentanaCargarTiendasModeloTabla(otraTienda));
		
		int cont = tiendaDao.numeroTiendas();
		
		if (cont > 0){
	
			//ArrayList<Tienda> tiendas =  this.organizacion.getTiendas();
			ArrayList<Tienda> tiendas = tiendaDao.consultarTiendas();
			
		} else {
			this.ventanaCargarTiendas.mostrarMensaje("Error  no hay tiendas Alamacenadas");
		}
	}


	private void guardarTiendas() {
		// TODO Auto-generated method stub
		
	try{
		//ArrayList<Producto> productos;

			
			//otraTienda = new ArrayList<Tienda>();
		
			Tienda tienda = new Tienda();
			String codigo, nombre, direccion, horaInicio, horaFin;
	
			codigo = this.ventanaCargarTiendas.getCodigo();
			nombre = this.ventanaCargarTiendas.getNombre();
			direccion = this.ventanaCargarTiendas.getDireccion();
			horaInicio = this.ventanaCargarTiendas.getHoraInicioTienda();
			horaFin = this.ventanaCargarTiendas.getHoraFinTienda();
			
			//productos = new ArrayList<Producto>();
			
			tienda.setDireccion(direccion);
			tienda.setHoraFin(horaFin);
			tienda.setHoraInicio(horaInicio);
			tienda.setNombre(nombre);
			tienda.setRif(codigo);
			
			//tienda = new Tienda(codigo, nombre, direccion, horaInicio, horaFin, productos);
			
			//tienda = new Tienda(codigo, nombre, direccion, horaInicio, horaFin);
			
			TiendaDAO tiendaDao = new TiendaDAO();
			tiendaDao.registrarTienda(tienda);
			
		    //this.organizacion.agregarTienda(tienda);
		
			ventanaCargarTiendas.limpiarCampos();
			ventanaCargarTiendas.bloquearEnabled(false);
			ventanaCargarTiendas.bloquearVisible(false);
		
	}
	catch(Exception exception){
		this.ventanaCargarTiendas.mostrarMensaje("Mensaje" + exception.getMessage().toString());
		
	}
	
	if(registrarTienda == false){
		this.ventanaCargarTiendas.mostrarMensaje("Tienda Registradas");
	}
	
	}	
	
	
}
